package com.haohan.jingyuan.common.enums;

/**
 * 错误枚举类
 * 定义系统中所有的错误码和对应的错误消息
 *
 * @ClassName ErrorEnum
 * @Description 错误枚举类，包含错误码和错误消息
 * @Author hexijun
 * @Time 2025/10/18 20:41
 * @Version 1.0
 */
public enum ErrorEnum {

    SUCCESS(200, "操作成功"),
    SYSTEM_ERROR(500, "系统内部错误"),


    // 登录登出
    LOGIN_TIMES(10101, "登录失败次数过多"),
    LOGOUT_ERROR(10102, "登出失败"),

    // 用户相关
    USER_NOT_FOUND(10201, "用户不存在"),
    USER_ALREADY_EXISTS(10202, "用户已存在"),
    USER_STATUS_ERROR(10203, "用户状态异常"),

    //角色相关
    ROLE_NOT_FOUND(10301, "角色不存在"),
    ROLE_ALREADY_EXISTS(10202, "角色已存在"),

    // 客户相关
    CUSTOMER_NOT_FOUND(10401, "客户不存在"),
    CUSTOMER_ALREADY_EXISTS(10402, "客户已存在"),

    // 客户追踪相关
    TRACE_NOT_FOUND(10501, "追踪记录不存在"),
    TRACE_ALREADY_EXISTS(10502, "追踪记录已存在"),

    // 客户收入相关
    INCOME_NOT_FOUND(10601, "收入记录不存在"),
    INCOME_AMOUNT_ERROR(10602, "收入金额计算错误"),

    // 客户收入类型相关
    INCOME_TYPE_NOT_FOUND(10701, "收入类型不存在"),
    INCOME_TYPE_ALREADY_EXISTS(10702, "收入类型已存在"),
    INCOME_TYPE_IN_USE(10703, "收入类型正在使用中，无法删除"),

    // 客户分组相关
    GROUP_NOT_FOUND(10801, "分组不存在"),
    GROUP_ALREADY_EXISTS(10802, "分组已存在"),
    GROUP_HAS_CHILDREN(10803, "分组存在子分组，无法删除"),
    GROUP_CANNOT_BE_PARENT_OF_ITSELF(10804, "分组不能设置自己为上级分组"),
    GROUP_IN_USE(10805, "分组被使用，无法删除"),
    GROUP_TYPE_CANT_CHANNEL(10806, "分组类型不可变更"),
    GROUP_TYPE_MUST_SAME(10807, "分组类型和父级分组类型必须保持一致"),

    // 客户标签相关
    TAG_NOT_FOUND(10901, "标签不存在"),
    TAG_ALREADY_EXISTS(10902, "标签已存在"),
    TAG_IN_USE(10903, "标签正在使用中，无法删除"),
    TAG_REPEAT(10904, "标签有重复值"),

    // 系统异常
    DATABASE_ERROR(19901, "数据库操作失败"),
    AES_ERROR(19902, "加解密异常"),
    USER_TLOGIN_ERROR(19903, "登录态异常"),

    ;


    /**
     * 错误码
     */
    private final Integer code;

    /**
     * 错误消息
     */
    private final String msg;

    /**
     * 构造函数
     *
     * @param code 错误码
     * @param msg  错误消息
     */
    ErrorEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    /**
     * 获取错误码
     *
     * @return 错误码
     */
    public Integer getCode() {
        return code;
    }

    /**
     * 获取错误消息
     *
     * @return 错误消息
     */
    public String getMsg() {
        return msg;
    }

    /**
     * 根据错误码获取枚举
     *
     * @param code 错误码
     * @return 对应的枚举，如果不存在则返回null
     */
    public static ErrorEnum getByCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (ErrorEnum errorEnum : values()) {
            if (errorEnum.getCode().equals(code)) {
                return errorEnum;
            }
        }
        return null;
    }
}
